package com.shlh.saas.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Supplier;

/**
 * 查询工具类
 * 提供安全执行查询的方法
 */
public class QueryUtil {
    
    /**
     * 安全执行查询，如果发生异常则返回空列表
     *
     * @param querySupplier 查询执行函数
     * @param <T> 结果类型
     * @return 查询结果或空列表
     */
    public static <T> List<T> safeExecuteQuery(Supplier<List<T>> querySupplier) {
        try {
            return querySupplier.get();
        } catch (Exception e) {
            System.err.println("执行查询时发生错误: " + e.getMessage());
            System.err.println("错误类型: " + e.getClass().getName());
            if (e.getCause() != null) {
                System.err.println("原始错误: " + e.getCause().getMessage());
            }
            e.printStackTrace();
            return Collections.emptyList();
        }
    }
    
    /**
     * 安全执行计数查询，如果发生异常则返回0
     *
     * @param countSupplier 计数查询执行函数
     * @return 计数结果或0
     */
    public static long safeExecuteCount(Supplier<Long> countSupplier) {
        try {
            return countSupplier.get();
        } catch (Exception e) {
            System.err.println("执行计数查询时发生错误: " + e.getMessage());
            System.err.println("错误类型: " + e.getClass().getName());
            if (e.getCause() != null) {
                System.err.println("原始错误: " + e.getCause().getMessage());
            }
            e.printStackTrace();
            return 0L;
        }
    }
} 